<!DOCTYPE html>
<style>
#justifyContentAuto {
    justify-content: auto;
}

#justifyContentSpaceBetween {
    justify-content: space-between;
}

#justifyContentSpaceAround {
    justify-content: space-around;
}

#justifyContentSpaceEvenly {
    justify-content: space-evenly;
}

#justifyContentStretch {
    justify-content: stretch;
}

#justifyContentStart {
    justify-content: start;
}

#justifyContentEnd {
    justify-content: end;
}

#justifyContentCenter {
    justify-content: center;
}

#justifyContentLeft {
    justify-content: left;
}

#justifyContentRight {
    justify-content: right;
}

#justifyContentFlexStart {
    justify-content: flex-start;
}

#justifyContentFlexEnd {
    justify-content: flex-end;
}

#justifyContentUnsafeEnd {
    justify-content: unsafe end ;
}

#justifyContentUnsafeCenter {
    justify-content: unsafe center ;
}

#justifyContentSafeRight {
    justify-content: safe right;
}

#justifyContentUnsafeLeft {
    justify-content: unsafe left;
}

#justifyContentUnsafeFlexStart {
    justify-content: unsafe flex-start;
}

#justifyContentSafeFlexEnd {
    justify-content: safe flex-end;
}

<!-- Invalid CSS cases -->
#justifyContentBaseline {
    justify-content: baseline;
}

#justifyContentFirstBaseline {
    justify-content: first baseline;
}

#justifyContentLastBaseline {
    justify-content: last baseline;
}

#justifyContentSpaceBetweenLeft {
    justify-content: space-between left;
}

#justifyContentSpaceAroundCenter {
    justify-content: space-around center;
}

#justifyContentSpaceEvenlyRight {
    justify-content: space-evenly right;
}

#justifyContentStretchStartSafe {
    justify-content: stretch start safe;
}

#justifyContentSpaceAroundEndUnsafe {
    justify-content: space-around end unsafe;
}

#justifyContentSpaceEvenlyFlexStartSafe {
    justify-content: space-evenly flex-start safe;
}

#justifyContentSpaceBetweenSafe {
    justify-content: space-between safe;
}

#justifyContentSpaceBetweenStretch {
    justify-content: space-between stretch;
}

#justifyContentSafe {
    justify-content: safe;
}

#justifyContentRightSafeUnsafe {
    justify-content: right safe unsafe;
}

#justifyContentCenterLeft {
    justify-content: center left;
}
</style>
<p>Test that setting and getting justify-content works as expected</p>
<div id="justifyContentAuto"></div>
<div id="justifyContentSpaceBetween"></div>
<div id="justifyContentSpaceAround"></div>
<div id="justifyContentSpaceEvenly"></div>
<div id="justifyContentStretch"></div>
<div id="justifyContentStart"></div>
<div id="justifyContentEnd"></div>
<div id="justifyContentCenter"></div>
<div id="justifyContentLeft"></div>
<div id="justifyContentRight"></div>
<div id="justifyContentFlexStart"></div>
<div id="justifyContentFlexEnd"></div>
<div id="justifyContentUnsafeEnd"></div>
<div id="justifyContentUnsafeCenter"></div>
<div id="justifyContentSafeSelfEnd"></div>
<div id="justifyContentSafeSelfStart"></div>
<div id="justifyContentSafeRight"></div>
<div id="justifyContentUnsafeLeft"></div>
<div id="justifyContentUnsafeFlexStart"></div>
<div id="justifyContentSafeFlexEnd"></div>
<div id="justifyContentEndUnsafe"></div>
<div id="justifyContentCenterUnsafe"></div>
<div id="justifyContentRightSafe"></div>
<div id="justifyContentLeftUnsafe"></div>
<div id="justifyContentFlexStartUnsafe"></div>
<div id="justifyContentFlexEndSafe"></div>

<div id="justifyContentBaseline"></div>
<div id="justifyContentFirstBaseline"></div>
<div id="justifyContentLastBaseline"></div>
<div id="justifyContentSpaceBetweenLeft"></div>
<div id="justifyContentSpaceAroundCenter"></div>
<div id="justifyContentSpaceEvenlyRight"></div>
<div id="justifyContentStretchStartSafe"></div>
<div id="justifyContentSpaceAroundEndUnsafe"></div>
<div id="justifyContentSpaceEvenlyFlexStartSafe"></div>
<div id="justifyContentSpaceBetweenSafe"></div>
<div id="justifyContentSpaceBetweenStretch"></div>
<div id="justifyContentSafe"></div>
<div id="justifyContentRightSafeUnsafe"></div>
<div id="justifyContentCenterLeft"></div>

<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="resources/alignment-parsing-utils-th.js"></script>
<script>
test(function() {
    var justifyContentAuto = document.getElementById("justifyContentAuto");
    checkValues(justifyContentAuto, "justifyContent", "justify-content", "", "normal");
    var justifyContentSpaceBetween = document.getElementById("justifyContentSpaceBetween");
    checkValues(justifyContentSpaceBetween, "justifyContent", "justify-content", "", "space-between");
    var justifyContentSpaceAround = document.getElementById("justifyContentSpaceAround");
    checkValues(justifyContentSpaceAround, "justifyContent", "justify-content", "", "space-around");
    var justifyContentSpaceEvenly = document.getElementById("justifyContentSpaceEvenly");
    checkValues(justifyContentSpaceEvenly, "justifyContent", "justify-content", "", "space-evenly");
    var justifyContentStretch = document.getElementById("justifyContentStretch");
    checkValues(justifyContentStretch, "justifyContent", "justify-content", "", "stretch");
    var justifyContentStart = document.getElementById("justifyContentStart");
    checkValues(justifyContentStart, "justifyContent", "justify-content", "", "start");
    var justifyContentEnd = document.getElementById("justifyContentEnd");
    checkValues(justifyContentEnd, "justifyContent", "justify-content", "", "end");
    var justifyContentCenter = document.getElementById("justifyContentCenter");
    checkValues(justifyContentCenter, "justifyContent", "justify-content", "", "center");
    var justifyContentLeft = document.getElementById("justifyContentLeft");
    checkValues(justifyContentLeft, "justifyContent", "justify-content", "", "left");
    var justifyContentRight = document.getElementById("justifyContentRight");
    checkValues(justifyContentRight, "justifyContent", "justify-content", "", "right");
    var justifyContentFlexStart = document.getElementById("justifyContentFlexStart");
    checkValues(justifyContentFlexStart, "justifyContent", "justify-content", "", "flex-start");
    var justifyContentFlexEnd = document.getElementById("justifyContentFlexEnd");
    checkValues(justifyContentFlexEnd, "justifyContent", "justify-content", "", "flex-end");
    var justifyContentUnsafeEnd = document.getElementById("justifyContentUnsafeEnd");
    checkValues(justifyContentUnsafeEnd, "justifyContent", "justify-content", "", "unsafe end");
    var justifyContentUnsafeCenter = document.getElementById("justifyContentUnsafeCenter");
    checkValues(justifyContentUnsafeCenter, "justifyContent", "justify-content", "", "unsafe center");
    var justifyContentSafeRight = document.getElementById("justifyContentSafeRight");
    checkValues(justifyContentSafeRight, "justifyContent", "justify-content", "", "safe right");
    var justifyContentUnsafeLeft = document.getElementById("justifyContentUnsafeLeft");
    checkValues(justifyContentUnsafeLeft, "justifyContent", "justify-content", "", "unsafe left");
    var justifyContentUnsafeFlexStart = document.getElementById("justifyContentUnsafeFlexStart");
    checkValues(justifyContentUnsafeFlexStart, "justifyContent", "justify-content", "", "unsafe flex-start");
    var justifyContentSafeFlexEnd = document.getElementById("justifyContentSafeFlexEnd");
    checkValues(justifyContentSafeFlexEnd, "justifyContent", "justify-content", "", "safe flex-end");
}, "Test getting justify-content values previously set through CSS.");

test(function() {
    var justifyContentBaseline = document.getElementById("justifyContentBaseline");
    checkValues(justifyContentBaseline, "justifyContent", "justify-content", "", "normal");
    var justifyContentLastBaseline = document.getElementById("justifyContentFirstBaseline");
    checkValues(justifyContentLastBaseline, "justifyContent", "justify-content", "", "normal");
    var justifyContentLastBaseline = document.getElementById("justifyContentLastBaseline");
    checkValues(justifyContentLastBaseline, "justifyContent", "justify-content", "", "normal");
    var justifyContentEndUnsafe = document.getElementById("justifyContentEndUnsafe");
    checkValues(justifyContentEndUnsafe, "justifyContent", "justify-content", "", "normal");
    var justifyContentCenterUnsafe = document.getElementById("justifyContentCenterUnsafe");
    checkValues(justifyContentCenterUnsafe, "justifyContent", "justify-content", "", "normal");
    var justifyContentRightSafe = document.getElementById("justifyContentRightSafe");
    checkValues(justifyContentRightSafe, "justifyContent", "justify-content", "", "normal");
    var justifyContentLeftUnsafe = document.getElementById("justifyContentLeftUnsafe");
    checkValues(justifyContentLeftUnsafe, "justifyContent", "justify-content", "", "normal");
    var justifyContentFlexStartUnsafe = document.getElementById("justifyContentFlexStartUnsafe");
    checkValues(justifyContentFlexStartUnsafe, "justifyContent", "justify-content", "", "normal");
    var justifyContentFlexEndSafe = document.getElementById("justifyContentFlexEndSafe");
    checkValues(justifyContentFlexEndSafe, "justifyContent", "justify-content", "", "normal");
    var justifyContentSpaceBetweenLeft = document.getElementById("justifyContentSpaceBetweenLeft");
    checkValues(justifyContentSpaceBetweenLeft, "justifyContent", "justify-content", "", "normal");
    var justifyContentSpaceAroundCenter = document.getElementById("justifyContentSpaceAroundCenter");
    checkValues(justifyContentSpaceAroundCenter, "justifyContent", "justify-content", "", "normal");
    var justifyContentSpaceEvenlyRight = document.getElementById("justifyContentSpaceEvenlyRight");
    checkValues(justifyContentSpaceEvenlyRight, "justifyContent", "justify-content", "", "normal");
    var justifyContentStretchStartSafe = document.getElementById("justifyContentStretchStartSafe");
    checkValues(justifyContentStretchStartSafe, "justifyContent", "justify-content", "", "normal");
    var justifyContentSpaceAroundEndUnsafe = document.getElementById("justifyContentSpaceAroundEndUnsafe");
    checkValues(justifyContentSpaceAroundEndUnsafe, "justifyContent", "justify-content", "", "normal");
    var justifyContentSpaceEvenlyFlexStartSafe = document.getElementById("justifyContentSpaceEvenlyFlexStartSafe");
    checkValues(justifyContentSpaceEvenlyFlexStartSafe, "justifyContent", "justify-content", "", "normal");
    var justifyContentSpaceBetweenSafe = document.getElementById("justifyContentSpaceBetweenSafe");
    checkValues(justifyContentSpaceBetweenSafe, "justifyContent", "justify-content", "", "normal");
    var justifyContentSpaceBetweenStretch = document.getElementById("justifyContentSpaceBetweenStretch");
    checkValues(justifyContentSpaceBetweenStretch, "justifyContent", "justify-content", "", "normal");
    var justifyContentSafe = document.getElementById("justifyContentSafe");
    checkValues(justifyContentSafe, "justifyContent", "justify-content", "", "normal");
    var justifyContentRightSafeUnsafe = document.getElementById("justifyContentRightSafeUnsafe");
    checkValues(justifyContentRightSafeUnsafe, "justifyContent", "justify-content", "", "normal");
    var justifyContentCenterLeft = document.getElementById("justifyContentCenterLeft");
    checkValues(justifyContentCenterLeft, "justifyContent", "justify-content", "", "normal");
}, "Test setting invalid values to justify-content through CSS.");

test(function() {
    element = document.createElement("div");
    document.body.appendChild(element);
    checkValues(element, "justifyContent", "justify-content", "", "normal");
}, "Test initial value of justify-content through JS");

test(function() {
    element = document.createElement("div");
    document.body.appendChild(element);
    element.style.justifyContent = "center";
    checkValues(element, "justifyContent", "justify-content",  "center", "center");

    element.style.justifyContent = "unsafe start";
    checkValues(element, "justifyContent", "justify-content",  "unsafe start", "unsafe start");

    element.style.justifyContent = "safe flex-end";
    checkValues(element, "justifyContent", "justify-content",  "safe flex-end", "safe flex-end");

    element.style.justifyContent = " unsafe right";
    checkValues(element, "justifyContent", "justify-content",  "unsafe right", "unsafe right");

    element.style.justifyContent = "normal";
    checkValues(element, "justifyContent", "justify-content",  "normal", "normal");

    element.style.display = "flex";
    element.style.justifyContent = "normal";
    checkValues(element, "justifyContent", "justify-content",  "normal", "normal");

    element.style.display = "grid";
    element.style.justifyContent = "normal";
    checkValues(element, "justifyContent", "justify-content",  "normal", "normal");

    element.style.justifyContent = "flex-end";
    checkValues(element, "justifyContent", "justify-content",  "flex-end", "flex-end");
}, "Test getting and setting justify-content through JS");

test(function() {
    element = document.createElement("div");
    document.body.appendChild(element);

    checkBadValues(element, "justifyContent", "justify-content",  "");
    checkBadValues(element, "justifyContent", "justify-content",  "auto");
    checkBadValues(element, "justifyContent", "justify-content",  "unsafe auto");
    checkBadValues(element, "justifyContent", "justify-content",  "auto safe");
    checkBadValues(element, "justifyContent", "justify-content",  "auto left");
    checkBadValues(element, "justifyContent", "justify-content",  "baseline safe");
    checkBadValues(element, "justifyContent", "justify-content",  "last-baseline center");
    checkBadValues(element, "justifyContent", "justify-content",  "unsafe unsafe");
    checkBadValues(element, "justifyContent", "justify-content",  "unsafe safe");
    checkBadValues(element, "justifyContent", "justify-content",  "center start");
    checkBadValues(element, "justifyContent", "justify-content",  "baseline safe");
    checkBadValues(element, "justifyContent", "justify-content",  "unsafe baseline");
    checkBadValues(element, "justifyContent", "justify-content",  "unsafe safe left");
    checkBadValues(element, "justifyContent", "justify-content",  "unsafe left safe");
    checkBadValues(element, "justifyContent", "justify-content",  "left safe unsafe safe");
    checkBadValues(element, "justifyContent", "justify-content",  "start right space-between");
    checkBadValues(element, "justifyContent", "justify-content",  "safe stretch");
    checkBadValues(element, "justifyContent", "justify-content",  "normal space-between");
    checkBadValues(element, "justifyContent", "justify-content",  "stretch normal");
    checkBadValues(element, "justifyContent", "justify-content",  "stretch center");
    checkBadValues(element, "justifyContent", "justify-content",  "space-between right safe");
    checkBadValues(element, "justifyContent", "justify-content",  "normal safe");
    checkBadValues(element, "justifyContent", "justify-content",  "space-around stretch");
    checkBadValues(element, "justifyContent", "justify-content",  "end space-between start");
    checkBadValues(element, "justifyContent", "justify-content",  "right safe left");
    checkBadValues(element, "justifyContent", "justify-content",  "unsafe");
    checkBadValues(element, "justifyContent", "justify-content",  "safe");
    checkBadValues(element, "justifyContent", "justify-content",  "start safe");
    checkBadValues(element, "justifyContent", "justify-content",  "end unsafe");
    checkBadValues(element, "justifyContent", "justify-content",  "baseline");
    checkBadValues(element, "justifyContent", "justify-content",  "first baseline");
    checkBadValues(element, "justifyContent", "justify-content",  "last baseline");
}, "Test bad combinations of justify-content");

test(function() {
    element.style.display = "";
    checkInitialValues(element, "justifyContent", "justify-content", "center", "normal");
}, "Test the value 'initial'");

test(function() {
    element.style.display = "grid";
    checkInitialValues(element, "justifyContent", "justify-content", "safe left", "normal");
}, "Test the value 'initial' for grid containers");

test(function() {
    element.style.display = "flex";
    checkInitialValues(element, "justifyContent", "justify-content", "unsafe right", "normal");
}, "Test the value 'initial' for flex containers");

test(function() {
    checkInheritValues("justifyContent", "justify-content", "end");
    checkInheritValues("justifyContent", "justify-content", "safe left");
    checkInheritValues("justifyContent", "justify-content", "unsafe center");
}, "Test the value 'inherit'");
</script>
